#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100

typedef struct {
    char app[10];
    int startTime;
    int endTime;
    int priority;
} App;

App apps[MAX];
int validApp = 0;

// 如果重叠
// 当前的 app 如果是高优先级，则加入并删除之前的 app，否则不加入
void isCoverAndInsert(App curApp) {
    if (validApp == 0) {
        apps[validApp++] = curApp;
    }
    else {
        int i = 0;
        while (i < validApp) {
            // note 1# 注意这里的逆向思维判定逻辑：只要不是完全在前或完全在后就是重叠
            if (!(curApp.endTime <= apps[i].startTime || curApp.startTime >= apps[i].endTime)) {
                    if (curApp.priority > apps[i].priority) {
                        for(int j = i; j < validApp - 1; j++) {
                            apps[j] = apps[j + 1];
                        }
                        validApp--;
                        // note 2#不是 break ，否则会跳过后面的重叠 
                        continue;
                    }
            }
        i++; 
        }
        apps[validApp++] = curApp;
    }
}

int main() {
    // 处理数据 把 09:00 存储为 900
    int num;
    scanf("%d", &num);
    for(int i = 0; i < num; i++) {
        char appName[10];
        int priority;
        int startTime;
        int endTime;
        int a, b, c, d;
        scanf("%s %d %d:%d %d:%d", appName, &priority,
                &a, &b, &c, &d);
        startTime = a * 100 + b;
        endTime = c * 100 + d;

        // 数据读入后，在之前的 apps 中查找是否时间区间重叠
        // 如果重叠，把低优先级的删去
        // 删去时 validApp 不++
        App curApp;
        curApp.priority = priority;
        strcpy(curApp.app, appName);
        curApp.startTime = startTime;
        curApp.endTime = endTime;
        isCoverAndInsert(curApp);
    }
    int time, a, b;
    scanf("%d:%d", &a, &b);
    time = a * 100 + b;
    for(int i = 0; i < validApp; i++) {
        if (time < apps[i].endTime &&
            time >= apps[i].startTime) {
                printf("%s\n", apps[i].app);
                return 0;
            }
    }

    printf("NA\n");
    return 0;
}
